The following table shows the metadata of the experiment, including the samples that expresses mutant TRIM28 genes.

run_name sample_name genotype/variation infection source_name treatment
7 SRR9602259 GSM3905830 CRISPR/Cas9-edited TRIM28 KO lentivirally transduced with TRIM28 6KR mutant uninfected (mock) TRIM28 6KR mock 6KR_mock
8 SRR9602260 GSM3905831 CRISPR/Cas9-edited TRIM28 KO lentivirally transduced with TRIM28 6KR mutant uninfected (mock) TRIM28 6KR mock 6KR_mock
9 SRR9602261 GSM3905832 CRISPR/Cas9-edited TRIM28 KO lentivirally transduced with TRIM28 6KR mutant uninfected (mock) TRIM28 6KR mock 6KR_mock
10 SRR9602262 GSM3905833 CRISPR/Cas9-edited TRIM28 KO lentivirally transduced with TRIM28 6KR mutant Influenza A/WSN/33, MOI10 PFU/cell, 6hpi TRIM28 6KR IAV infected 6KR_infected
11 SRR9602263 GSM3905834 CRISPR/Cas9-edited TRIM28 KO lentivirally transduced with TRIM28 6KR mutant Influenza A/WSN/33, MOI10 PFU/cell, 6hpi TRIM28 6KR IAV infected 6KR_infected
12 SRR9602264 GSM3905835 CRISPR/Cas9-edited TRIM28 KO lentivirally transduced with TRIM28 6KR mutant Influenza A/WSN/33, MOI10 PFU/cell, 6hpi TRIM28 6KR IAV infected 6KR_infected

The heatmap below shows the distances across the samples, which is greatly similar to the first half of the dataset. The mock infected samples are similar to each other and significantly different from the influenza infected samples. The influenza infected samples with the mutant TRIM28 gene are more similar to each other than the samples expressing the wild type TRIM28.

Similarly to the first analysis the presence of inluenza A is responsible for the great majority of the variance in the dataset, in this case 85% of the variance is explained by the first principal component.

Result of DESeq on the samples


out of 29791 with nonzero total read count
adjusted p-value < 0.1
LFC > 0 (up)       : 6182, 21%
LFC < 0 (down)     : 5187, 17%
outliers [1]       : 15, 0.05%
low counts [2]     : 7105, 24%
(mean count < 1)
[1] see 'cooksCutoff' argument of ?results
[2] see 'independentFiltering' argument of ?results

The initial result of the differential expression analysis is also highly similar to the first analysis. The number of genes with nonzero read count, low count and outliers are approximately the same resulting in about the same amount of differentially expressed genes based on the default treshold.

As in the first part of the dataset I introduced the same tresholds for the adjusted p-value and log2 fold change to further filter the initially obtained differentially expressed genes. (adjusted p-value <0.01 and |log2 fold change| > 2.) Based on this approach there are 2810 differentially expressed genes in this dataset.

The interactive volcano plot below shows the same features as the volcano plot of the first part of the dataset. The majority of the differentially expressed genes are upregulated and the log2 fold change ranges from 2 to 10.

The tables below shows the difference between the original gene counts and the counts after the variance stabilizing transformation in the first five genes of the heatmap.

Original gene counts:

GSM3905830 GSM3905831 GSM3905832 GSM3905833 GSM3905834 GSM3905835
CALCR 0 0 0 49 94 69
PIK3CG 0 0 0 41 36 30
ENDOU 0 0 0 64 47 37
BTN1A1 0 0 0 38 55 41
OTOR 0 0 0 77 74 55

Transformed gene counts:

GSM3905830 GSM3905831 GSM3905832 GSM3905833 GSM3905834 GSM3905835
CALCR 3.491272 3.491272 3.491272 6.732144 7.752107 7.507246
PIK3CG 3.491272 3.491272 3.491272 6.196133 7.231953 6.231295
ENDOU 3.491272 3.491272 3.491272 7.260369 7.008946 6.432902
BTN1A1 3.491272 3.491272 3.491272 6.388512 7.102980 6.896049
OTOR 3.491272 3.491272 3.491272 7.223277 7.467922 7.254628

The following plot shows the top biological processes that are enriched in the differentially expressed genes. Just like in the first half of the dataset the most enriched biological process is “leukocyte differentiation”. Beside that only the “positive regulation of leukocyte migration” biological process is present in both datasets in the 10 most enriched gene sets, which indicates significantly different immune response in the two datasets.

The following table shows the list of over-representated KEGG pathways in the differentially expressed genes which is identical with the over-represented pathways in the first dataset.

Description GeneRatio p.adjust
Cytokine-cytokine receptor interaction 46/596 0.0000000
Viral protein interaction with cytokine and cytokine receptor 23/596 0.0000000
IL-17 signaling pathway 22/596 0.0003400
NF-kappa B signaling pathway 21/596 0.0082176
Staphylococcus aureus infection 12/596 0.0165541
TNF signaling pathway 22/596 0.0180911
LS0tDQp0aXRsZTogPGNlbnRlcj4gPGgxPlJOQS1zZXEgYW5hbHlzaXMgb2Ygc2FtcGxlcyBleHByZXNzaW5nIG11dGFudCBUUklNMjggZ2VuZSAoVFJJTTI4IDZLUik8L2gxPiA8L2NlbnRlcj4NCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCg0KDQoNCmBgYHtyIGxvYWRfcGFja2FnZXMsIGluY2x1ZGU9RkFMU0V9DQpsaWJyYXJ5KEJpb2NNYW5hZ2VyKQ0KbGlicmFyeShrbml0cikNCmxpYnJhcnkodHhpbXBvcnQpDQpsaWJyYXJ5KERFU2VxMikNCmxpYnJhcnkocGhlYXRtYXApDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGJpb21hUnQpDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkoUkNvbG9yQnJld2VyKQ0KbGlicmFyeShjbHVzdGVyUHJvZmlsZXIpDQpsaWJyYXJ5KG9yZy5Icy5lZy5kYikNCmxpYnJhcnkocGF0aHZpZXcpDQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeShrYWJsZUV4dHJhKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpgYGANCg0KDQpgYGB7ciBsb2FkX2RhdGEsIGluY2x1ZGU9RkFMU0V9DQpzYW1wbGVfdGFibGUgPC0gYXMuZGF0YS5mcmFtZShyZWFkX2NzdigiLi4vU3JhUnVuVGFibGUudHh0IikpDQoNCnNhbXBsZV90YWJsZSA8LSBzZWxlY3Qoc2FtcGxlX3RhYmxlLCBSdW4sICdTYW1wbGUgTmFtZScsICdnZW5vdHlwZS92YXJpYXRpb24nLCAgaW5mZWN0aW9uLCBzb3VyY2VfbmFtZSkNCg0Kc2FtcGxlX3RhYmxlIDwtIHJlbmFtZShzYW1wbGVfdGFibGUsIHJ1bl9uYW1lPVJ1biwgc2FtcGxlX25hbWU9J1NhbXBsZSBOYW1lJykNCg0Kc2FtcGxlX3RhYmxlJHRyZWF0bWVudCA8LSBmYWN0b3IocmVwKGMoInd0X21vY2siLCAid3RfaW5mZWN0ZWQiLCAiNktSX21vY2siLCAiNktSX2luZmVjdGVkIiksIGVhY2ggPSAzKSwgbGV2ZWxzPSBjKCJ3dF9tb2NrIiwgInd0X2luZmVjdGVkIiwgIjZLUl9tb2NrIiwgIjZLUl9pbmZlY3RlZCIpKQ0KDQpzYW1wbGVfZmlsZXM9bGlzdC5maWxlcygiQzovQW5jc2kvQmlvaW5mb3JtYXRpY3MgU3VwcG9ydCBVbml0L3Byb2plY3RfdmlydXNfMjAyMC9zYWxtb25fb3V0cHV0IiwgZnVsbC5uYW1lcyA9IFRSVUUsIHJlY3Vyc2l2ZSA9IFRSVUUsIHBhdHRlcm4gPSAicXVhbnQuc2YiKQ0KDQpuYW1lcyhzYW1wbGVfZmlsZXMpID0gcHVsbChzYW1wbGVfdGFibGUsIHNhbXBsZV9uYW1lKQ0KDQpnZW5lX21hcCA8LSByZWFkX2NzdigiLi4vcHJvamVjdF8yMDIwX2dlbmVfbWFwLmNzdiIsIGNvbF9uYW1lcyA9IGMoImVuc3RfaWQiLCAiZW5zZ19pZCIpKQ0KDQpgYGANCg0KDQoNCmBgYHtyIDZLUl9kYXRhX2FuYWx5c2lzLCBpbmNsdWRlPUZBTFNFfQ0KDQpzYW1wbGVfdGFibGVfNktSID0gc2FtcGxlX3RhYmxlWzc6MTIsIF0NCg0Kc2FtcGxlX2ZpbGVzXzZLUiA9IHNhbXBsZV9maWxlc1s3OjEyXQ0KDQp0eGlfNktSID0gdHhpbXBvcnQoZmlsZXMgPSBzYW1wbGVfZmlsZXNfNktSLA0KICAgICAgICAgICAgICAgICAgdHlwZSA9ICJzYWxtb24iLA0KICAgICAgICAgICAgICAgICAgdHgyZ2VuZSA9IGdlbmVfbWFwLA0KICAgICAgICAgICAgICAgICAgaWdub3JlVHhWZXJzaW9uID0gVFJVRSkNCg0KZGRzXzZLUiA9IERFU2VxRGF0YVNldEZyb21UeGltcG9ydCh0eGkgPSB0eGlfNktSLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbERhdGEgPSBzYW1wbGVfdGFibGVfNktSLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lnbiA9IH4gdHJlYXRtZW50KQ0KDQpkZHNfNktSID0gREVTZXEoZGRzXzZLUikNCg0KdnN0XzZLUiA9IHZhcmlhbmNlU3RhYmlsaXppbmdUcmFuc2Zvcm1hdGlvbihkZHNfNktSKQ0KDQpkaXN0XzZLUiA9IGFzLm1hdHJpeChkaXN0KHQoYXNzYXkodnN0XzZLUikpKSkNCg0KYGBgDQoNClwgDQpcIA0KXCANCg0KDQoNCg0KDQoNClRoZSBmb2xsb3dpbmcgdGFibGUgc2hvd3MgdGhlIG1ldGFkYXRhIG9mIHRoZSBleHBlcmltZW50LCBpbmNsdWRpbmcgdGhlIHNhbXBsZXMgdGhhdCBleHByZXNzZXMgbXV0YW50IFRSSU0yOCBnZW5lcy4NCg0KYGBge3IgNktSX21ldGEsIGVjaG89RkFMU0V9DQprYWJsZShzYW1wbGVfdGFibGVfNktSKSAlPiUga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoImJvcmRlcmVkIiwgImhvdmVyIiksIGZ1bGxfd2lkdGggPSBGLCBwb3NpdGlvbiA9ICJsZWZ0IikNCmBgYA0KDQoNClRoZSBoZWF0bWFwIGJlbG93IHNob3dzIHRoZSBkaXN0YW5jZXMgYWNyb3NzIHRoZSBzYW1wbGVzLCB3aGljaCBpcyBncmVhdGx5IHNpbWlsYXIgdG8gdGhlIGZpcnN0IGhhbGYgb2YgdGhlIGRhdGFzZXQuIFRoZSBtb2NrIGluZmVjdGVkIHNhbXBsZXMgYXJlIHNpbWlsYXIgdG8gZWFjaCBvdGhlciBhbmQgc2lnbmlmaWNhbnRseSBkaWZmZXJlbnQgZnJvbSB0aGUgaW5mbHVlbnphIGluZmVjdGVkIHNhbXBsZXMuIFRoZSBpbmZsdWVuemEgaW5mZWN0ZWQgc2FtcGxlcyB3aXRoIHRoZSBtdXRhbnQgVFJJTTI4IGdlbmUgYXJlIG1vcmUgc2ltaWxhciB0byBlYWNoIG90aGVyIHRoYW4gdGhlIHNhbXBsZXMgZXhwcmVzc2luZyB0aGUgd2lsZCB0eXBlIFRSSU0yOC4NCg0KYGBge3IgNktSX3NhbXBsZV9kaXN0LCBlY2hvPUZBTFNFfQ0KDQpwaGVhdG1hcChkaXN0XzZLUikNCg0KYGBgDQoNCg0KU2ltaWxhcmx5IHRvIHRoZSBmaXJzdCBhbmFseXNpcyB0aGUgcHJlc2VuY2Ugb2YgaW5sdWVuemEgQSBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGdyZWF0IG1ham9yaXR5IG9mIHRoZSB2YXJpYW5jZSBpbiB0aGUgZGF0YXNldCwgaW4gdGhpcyBjYXNlIDg1JSBvZiB0aGUgdmFyaWFuY2UgaXMgZXhwbGFpbmVkIGJ5IHRoZSBmaXJzdCBwcmluY2lwYWwgY29tcG9uZW50Lg0KDQoNCmBgYHtyIDZLUl9wbG90cGNhLCBlY2hvPUZBTFNFfQ0KcGxvdFBDQSh2c3RfNktSLCBpbnRncm91cCA9ICJ0cmVhdG1lbnQiKQ0KYGBgDQoNCg0KYGBge3IgNktSX3Jlc3VsdCwgaW5jbHVkZT1GQUxTRX0NCg0KcmVzdWx0X2Rkc182S1IgPSByZXN1bHRzKGRkc182S1IsIGNvbnRyYXN0ID0gYygidHJlYXRtZW50IiwgIjZLUl9pbmZlY3RlZCIsIjZLUl9tb2NrIikpDQoNCmBgYA0KDQoNClJlc3VsdCBvZiBERVNlcSBvbiB0aGUgc2FtcGxlcyANCg0KYGBge3IgNktSX3Jlc3VsdF9zdW1tYXJ5LCBlY2hvPUZBTFNFfQ0Kc3VtbWFyeShyZXN1bHRfZGRzXzZLUikNCmBgYA0KDQpUaGUgaW5pdGlhbCByZXN1bHQgb2YgdGhlIGRpZmZlcmVudGlhbCBleHByZXNzaW9uIGFuYWx5c2lzIGlzIGFsc28gaGlnaGx5IHNpbWlsYXIgdG8gdGhlIGZpcnN0IGFuYWx5c2lzLiBUaGUgbnVtYmVyIG9mIGdlbmVzIHdpdGggbm9uemVybyByZWFkIGNvdW50LCBsb3cgY291bnQgYW5kIG91dGxpZXJzIGFyZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIHJlc3VsdGluZyBpbiBhYm91dCB0aGUgc2FtZSBhbW91bnQgb2YgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIGdlbmVzIGJhc2VkIG9uIHRoZSBkZWZhdWx0IHRyZXNob2xkLg0KDQpBcyBpbiB0aGUgZmlyc3QgcGFydCBvZiB0aGUgZGF0YXNldCBJIGludHJvZHVjZWQgdGhlIHNhbWUgdHJlc2hvbGRzIGZvciB0aGUgYWRqdXN0ZWQgcC12YWx1ZSBhbmQgbG9nMiBmb2xkIGNoYW5nZSB0byBmdXJ0aGVyIGZpbHRlciB0aGUgaW5pdGlhbGx5IG9idGFpbmVkIGRpZmZlcmVudGlhbGx5IGV4cHJlc3NlZCBnZW5lcy4gKGFkanVzdGVkIHAtdmFsdWUgPDAuMDEgYW5kIHxsb2cyIGZvbGQgY2hhbmdlfCA+IDIuKQ0KQmFzZWQgb24gdGhpcyBhcHByb2FjaCB0aGVyZSBhcmUgMjgxMCBkaWZmZXJlbnRpYWxseSBleHByZXNzZWQgZ2VuZXMgaW4gdGhpcyBkYXRhc2V0Lg0KDQoNCg0KDQpgYGB7ciA2S1JfYW5ub3RhdGlvbiwgaW5jbHVkZT1GQUxTRX0NCnJlc3VsdF9kZHNfNktSX2RmID0gYXMuZGF0YS5mcmFtZShyZXN1bHRfZGRzXzZLUikNCg0KZGRzXzZLUl9maWx0ZXIxID0gcmVzdWx0X2Rkc182S1JfZGZbIGNvbXBsZXRlLmNhc2VzKHJlc3VsdF9kZHNfNktSX2RmKSwgXQ0KDQoNCmRkc182S1JfZmlsdGVyMSA9IHJvd25hbWVzX3RvX2NvbHVtbihkZHNfNktSX2ZpbHRlcjEsIHZhciA9ICdlbnNnX2lkJykNCg0KDQplbnNlbWJsMTAwID0gdXNlRW5zZW1ibChiaW9tYXJ0ID0gJ2Vuc2VtYmwnLCBkYXRhc2V0ID0gJ2hzYXBpZW5zX2dlbmVfZW5zZW1ibCcpDQoNCmFubm90YXRpb25fNktSID0gZ2V0Qk0oYXR0cmlidXRlcyA9IGMoJ2Vuc2VtYmxfZ2VuZV9pZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VudHJlemdlbmVfaWQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHRlcm5hbF9nZW5lX25hbWUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjaHJvbW9zb21lX25hbWUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXNjcmlwdGlvbicpLA0KICAgICAgICAgICAgICAgICAgZmlsdGVycyA9ICdlbnNlbWJsX2dlbmVfaWQnLA0KICAgICAgICAgICAgICAgICAgdmFsdWVzID0gZGRzXzZLUl9maWx0ZXIxJGVuc2dfaWQsDQogICAgICAgICAgICAgICAgICBtYXJ0ID0gZW5zZW1ibDEwMCkNCg0KYW5ub3RhdGVkX2Rkc182S1JfZmlsdGVyMSA9IGxlZnRfam9pbihkZHNfNktSX2ZpbHRlcjEsIGFubm90YXRpb25fNktSLCBieSA9IGMoJ2Vuc2dfaWQnID0gJ2Vuc2VtYmxfZ2VuZV9pZCcpICkNCmBgYA0KDQoNCg0KYGBge3IgNktSX3ZvbGNhbm9fc2NyaXB0LCBpbmNsdWRlPSBGQUxTRX0NCg0KIyBhZGRpbmcgYSBuZXcgY29sdW1uIHdpdGggbG9naWNhbCB2YWx1ZXMgZGVjaWRpbmcgd2hldGhlciBhIGdlbmUgaXMgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIG9yIG5vdA0KYW5ub3RhdGVkX2Rkc182S1JfZmlsdGVyMSRkaWZmX2dlbmVzID0gYW5ub3RhdGVkX2Rkc182S1JfZmlsdGVyMSRwYWRqIDwgMC4wMSAmIGFicyhhbm5vdGF0ZWRfZGRzXzZLUl9maWx0ZXIxJGxvZzJGb2xkQ2hhbmdlKSA+IDINCg0KYW5ub3RhdGVkX2Rkc182S1JfZmlsdGVyMSRzaGFwZSA9IGlmZWxzZSgoLWxvZzEwKGFubm90YXRlZF9kZHNfNktSX2ZpbHRlcjEkcGFkaik+NTApLCAidHJpYW5nbGUiLCAiY2lyY2xlIikNCmFubm90YXRlZF9kZHNfNktSX2ZpbHRlcjEkbGltaXRlZF9wYWRqID0gLWxvZzEwKGFubm90YXRlZF9kZHNfNktSX2ZpbHRlcjEkcGFkaikNCmFubm90YXRlZF9kZHNfNktSX2ZpbHRlcjEkbGltaXRlZF9wYWRqW2Fubm90YXRlZF9kZHNfNktSX2ZpbHRlcjEkbGltaXRlZF9wYWRqPjUwXSA9IDUwDQoNCiMgdGhlcmUgYXJlIDE3IGdlbmVzIHdpdGggLWxvZzEwIHBhZGogNTAgb3IgYWJvdmUgNTANCg0KDQp2b2xjYW5vX3Bsb3RfNktSID0gZ2dwbG90KGFubm90YXRlZF9kZHNfNktSX2ZpbHRlcjEsIGFlcyh4ID0gbG9nMkZvbGRDaGFuZ2UsIHkgPSBsaW1pdGVkX3BhZGosIGNvbG91ciA9IGRpZmZfZ2VuZXMsIHNoYXBlID0gc2hhcGUsIG5hbWUgPSBleHRlcm5hbF9nZW5lX25hbWUpKSArDQogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJibGFjayIsICJyZWQiKSkgKw0KICBnZW9tX3BvaW50KHNpemUgPSAxLjUsIGFscGhhID0gMC4yKSArDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDIsIGNvbG91ciA9ICdncmV5JywgbGluZXR5cGUgPSAyKSArDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IC0yLCBjb2xvdXIgPSAnZ3JleScsIGxpbmV0eXBlID0gMikgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAtbG9nMTAoMC4wMSksIGNvbG91ciA9ICdncmV5JywgbGluZXR5cGUgPSAyKSArDQogIHhsaW0oLTEwLCAxMCkgKw0KICB5bGltKDAsIDUwKSArDQogIHRoZW1lX2J3KCkgKw0KICBsYWJzKHRpdGxlID0gIlZvbGNhbm8gcGxvdCBvZiBtdXRhbnQgVFJJTTI4IHNhbXBsZXMiLA0KICAgICAgIHggPSAiTG9nMkZvbGRDaGFuZ2Ugb2YgZ2VuZSBleHByZXNzaW9uIiwNCiAgICAgICB5ID0gIi1sb2cxMCBvZiB0aGUgYWRqdXN0ZWQgcC12YWx1ZSIpICsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ25vbmUnLA0KICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2U9ImJvbGQiLCBzaXplPTEyLCB2anVzdCA9IDAuNSksDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUgLGZhY2U9ImJvbGQiLCBzaXplPTE0KSwgDQogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIHNpemU9MTIpKQ0KDQpgYGANCg0KDQpUaGUgaW50ZXJhY3RpdmUgdm9sY2FubyBwbG90IGJlbG93IHNob3dzIHRoZSBzYW1lIGZlYXR1cmVzIGFzIHRoZSB2b2xjYW5vIHBsb3Qgb2YgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGRhdGFzZXQuIFRoZSBtYWpvcml0eSBvZiB0aGUgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIGdlbmVzIGFyZSB1cHJlZ3VsYXRlZCBhbmQgdGhlIGxvZzIgZm9sZCBjaGFuZ2UgcmFuZ2VzIGZyb20gMiB0byAxMC4gDQoNCmBgYHtyIDZLUl92b2xjYW5vX3Bsb3QsIGVjaG89RkFMU0V9DQpnZ3Bsb3RseSh2b2xjYW5vX3Bsb3RfNktSKQ0KYGBgDQoNCg0KDQoNCmBgYHtyIDJfNktSX2ZpbHRlcmluZywgaW5jbHVkZT1GQUxTRX0NCmRkc182S1JfZmlsdGVyMiA9IGRkc182S1JfZmlsdGVyMVtkZHNfNktSX2ZpbHRlcjEkcGFkaiA8IDAuMDEsIF0NCg0KZGRzXzZLUl9maWx0ZXIzID0gZGRzXzZLUl9maWx0ZXIyWyBhYnMoZGRzXzZLUl9maWx0ZXIyJGxvZzJGb2xkQ2hhbmdlKSA+IDIsIF0NCg0KI2Rkc182S1JfZmlsdGVyMyA9IHJvd25hbWVzX3RvX2NvbHVtbihkZHNfNktSX2ZpbHRlcjMsIHZhciA9ICJlbnNnX2lkIikNCg0KYW5ub3RhdGVkX2Rkc182S1JfZmlsdGVyMyA9IGxlZnRfam9pbihkZHNfNktSX2ZpbHRlcjMsIGFubm90YXRpb25fNktSLCBieSA9IGMoImVuc2dfaWQiID0gImVuc2VtYmxfZ2VuZV9pZCIpKQ0KYGBgDQoNCg0KDQpgYGB7ciA2S1JfdG9wXzI1X2dlbmVzLCBpbmNsdWRlPUZBTFNFfQ0KdG9wXzI1XzZLUiA9IGFycmFuZ2UoYW5ub3RhdGVkX2Rkc182S1JfZmlsdGVyMywgZGVzYyhhYnMobG9nMkZvbGRDaGFuZ2UpKSlbMToyNSwgXQ0KDQpnZW5lc18yNV82S1IgPSB0b3BfMjVfNktSJGVuc2dfaWQNCg0KbmFtZXMoZ2VuZXNfMjVfNktSKSA9IHRvcF8yNV82S1IkZXh0ZXJuYWxfZ2VuZV9uYW1lDQoNCg0KdG9wXzI1X3ZzdF82S1IgPSBhc3NheSh2c3RfNktSKVtnZW5lc18yNV82S1IsIF0NCg0Kcm93bmFtZXModG9wXzI1X3ZzdF82S1IpID0gbmFtZXMoZ2VuZXNfMjVfNktSKQ0KDQpgYGANCg0KDQoNCmBgYHtyIDZLUl9jb2xvdXJzLCBpbmNsdWRlPUZBTFNFfQ0KY29sb3JzID0gY29sb3JSYW1wUGFsZXR0ZShicmV3ZXIucGFsKDcsICJCbHVlcyIpKSgxMDApDQpgYGANCg0KDQoNCg0KYGBge3IgNktSX3RvcF8yNV9oZWF0bWFwLCBlY2hvPUZBTFNFfQ0KDQpwaGVhdG1hcCh0b3BfMjVfdnN0XzZLUiwgZm9udHNpemUgPSA3LCBjb2xvciA9IGNvbG9ycywgY3V0cmVlX2NvbHMgPSAyKQ0KDQpgYGANCg0KDQoNCmBgYHtyIDZLUl81LCBpbmNsdWRlPUZBTFNFfQ0KY291bnRfNV82S1IgPSBhcy5kYXRhLmZyYW1lKGNvdW50cyhkZHNfNktSKSkNCg0KY291bnRfNV82S1IgPSByb3duYW1lc190b19jb2x1bW4oY291bnRfNV82S1IsIHZhciA9ICJlbnNnX2lkIikNCg0KY291bnRfNV82S1IgPSAgY291bnRfNV82S1JbY291bnRfNV82S1IkZW5zZ19pZCAgJWluJSBnZW5lc18yNV82S1IsIF1bMTo1LCBdDQoNCmNvdW50XzVfNktSID0gbGVmdF9qb2luKGNvdW50XzVfNktSLCBhbm5vdGF0aW9uXzZLUlsgLCBjKCdlbnNlbWJsX2dlbmVfaWQnLCdleHRlcm5hbF9nZW5lX25hbWUnKV0sIGJ5ID0gYygiZW5zZ19pZCIgPSAiZW5zZW1ibF9nZW5lX2lkIikpDQoNCmNvdW50XzVfNktSID0gY29sdW1uX3RvX3Jvd25hbWVzKGNvdW50XzVfNktSLCdleHRlcm5hbF9nZW5lX25hbWUnICkNCg0KY291bnRfNV82S1IkZW5zZ19pZCA9IE5VTEwNCg0KDQphc3NheV81XzZLUiA9IGFzLmRhdGEuZnJhbWUoYXNzYXkodnN0XzZLUikpDQoNCmFzc2F5XzVfNktSID0gcm93bmFtZXNfdG9fY29sdW1uKGFzc2F5XzVfNktSLCB2YXIgPSAiZW5zZ19pZCIpDQoNCmFzc2F5XzVfNktSID0gIGFzc2F5XzVfNktSW2Fzc2F5XzVfNktSJGVuc2dfaWQgICVpbiUgZ2VuZXNfMjVfNktSLCBdWzE6NSwgXQ0KDQphc3NheV81XzZLUiA9IGxlZnRfam9pbihhc3NheV81XzZLUiwgYW5ub3RhdGlvbl82S1JbICwgYygnZW5zZW1ibF9nZW5lX2lkJywnZXh0ZXJuYWxfZ2VuZV9uYW1lJyldLCBieSA9IGMoImVuc2dfaWQiID0gImVuc2VtYmxfZ2VuZV9pZCIpKQ0KDQphc3NheV81XzZLUiA9IGNvbHVtbl90b19yb3duYW1lcyhhc3NheV81XzZLUiwnZXh0ZXJuYWxfZ2VuZV9uYW1lJyApDQoNCmFzc2F5XzVfNktSJGVuc2dfaWQgPSBOVUxMDQpgYGANCg0KDQpUaGUgdGFibGVzIGJlbG93IHNob3dzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG9yaWdpbmFsIGdlbmUgY291bnRzIGFuZCB0aGUgY291bnRzIGFmdGVyIHRoZSB2YXJpYW5jZSBzdGFiaWxpemluZyB0cmFuc2Zvcm1hdGlvbiBpbiB0aGUgZmlyc3QgZml2ZSBnZW5lcyBvZiB0aGUgaGVhdG1hcC4NCg0KT3JpZ2luYWwgZ2VuZSBjb3VudHM6DQoNCmBgYHtyIHRhYmxlX2NvdW50LCBlY2hvPUZBTFNFfQ0Ka2FibGUoY291bnRfNV82S1IpICU+JSBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygiYm9yZGVyZWQiLCAiaG92ZXIiKSwgZnVsbF93aWR0aCA9IEYsIHBvc2l0aW9uID0gImxlZnQiKQ0KYGBgDQoNCg0KVHJhbnNmb3JtZWQgZ2VuZSBjb3VudHM6DQoNCmBgYHtyIHRhYmxlX2Fzc2F5LCBlY2hvPUZBTFNFfQ0Ka2FibGUoYXNzYXlfNV82S1IpICU+JSBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygiYm9yZGVyZWQiLCAiaG92ZXIiKSwgZnVsbF93aWR0aCA9IEYsIHBvc2l0aW9uID0gImxlZnQiKQ0KYGBgDQoNCg0KDQoNCg0KDQoNCmBgYHtyIDZLUl9nZW5lX3NldF9lbnJpY2htZW50LCBpbmNsdWRlPUZBTFNFfQ0KDQplbnRyZXpfZ2VuZV82S1IgPSBhcy5jaGFyYWN0ZXIoYW5ub3RhdGVkX2Rkc182S1JfZmlsdGVyMyRlbnRyZXpnZW5lX2lkKQ0KDQplbnRyZXpfdW5pXzZLUiA9IGFzLmNoYXJhY3Rlcihhbm5vdGF0ZWRfZGRzXzZLUl9maWx0ZXIxJGVudHJlemdlbmVfaWQpDQoNCg0KZWdvXzZLUiA9IGVucmljaEdPKGdlbmUgPSBlbnRyZXpfZ2VuZV82S1IsDQogICAgICAgICAgICAgICAgICBPcmdEYiA9IG9yZy5Icy5lZy5kYiwNCiAgICAgICAgICAgICAgICAgIG9udCA9ICJCUCIsDQogICAgICAgICAgICAgICAgICB1bml2ZXJzZSA9IGVudHJlel91bmlfNktSLA0KICAgICAgICAgICAgICAgICAgcmVhZGFibGUgPSBUUlVFKQ0KDQoNCmBgYA0KDQpUaGUgZm9sbG93aW5nIHBsb3Qgc2hvd3MgdGhlIHRvcCBiaW9sb2dpY2FsIHByb2Nlc3NlcyB0aGF0IGFyZSBlbnJpY2hlZCBpbiB0aGUgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIGdlbmVzLiBKdXN0IGxpa2UgaW4gdGhlIGZpcnN0IGhhbGYgb2YgdGhlIGRhdGFzZXQgdGhlIG1vc3QgZW5yaWNoZWQgYmlvbG9naWNhbCBwcm9jZXNzIGlzICJsZXVrb2N5dGUgZGlmZmVyZW50aWF0aW9uIi4gQmVzaWRlIHRoYXQgb25seSB0aGUgInBvc2l0aXZlIHJlZ3VsYXRpb24gb2YgbGV1a29jeXRlIG1pZ3JhdGlvbiIgYmlvbG9naWNhbCBwcm9jZXNzIGlzIHByZXNlbnQgaW4gYm90aCBkYXRhc2V0cyBpbiB0aGUgMTAgbW9zdCBlbnJpY2hlZCBnZW5lIHNldHMsIHdoaWNoIGluZGljYXRlcyBzaWduaWZpY2FudGx5IGRpZmZlcmVudCBpbW11bmUgcmVzcG9uc2UgaW4gdGhlIHR3byBkYXRhc2V0cy4NCg0KYGBge3IgNktSX2RvdHBsb3RfZW5yaWNobWVudCwgZWNobz1GQUxTRX0NCmRvdHBsb3QoZWdvXzZLUikNCg0KYGBgDQoNCg0KDQpgYGB7ciA2S1Jfa2VnZywgaW5jbHVkZT1GQUxTRX0NCmtlZ2dfcGF0aHdheV82S1IgPSBlbnJpY2hLRUdHKGdlbmUgPSBlbnRyZXpfZ2VuZV82S1IsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXZlcnNlID0gZW50cmV6X3VuaV82S1IpDQoNCmtlZ2dfNktSX2RmID0gYXMuZGF0YS5mcmFtZShrZWdnX3BhdGh3YXlfNktSKQ0KDQpgYGANCg0KVGhlIGZvbGxvd2luZyB0YWJsZSBzaG93cyB0aGUgbGlzdCBvZiBvdmVyLXJlcHJlc2VudGF0ZWQgS0VHRyBwYXRod2F5cyBpbiB0aGUgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIGdlbmVzIHdoaWNoIGlzIGlkZW50aWNhbCB3aXRoIHRoZSBvdmVyLXJlcHJlc2VudGVkIHBhdGh3YXlzIGluIHRoZSBmaXJzdCBkYXRhc2V0Lg0KDQpgYGB7ciBrZWdnX3RhYmxlXzZLUiwgZWNobz1GQUxTRX0NCmthYmxlKGtlZ2dfd3RfbWFpbikgJT4lIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJib3JkZXJlZCIsICJob3ZlciIpLCBmdWxsX3dpZHRoID0gRiwgcG9zaXRpb24gPSAibGVmdCIpDQpgYGANCg0KDQo=